package zero.mybatisplus.dynamictable.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import zero.mybatisplus.dynamictable.param.DynamicTableParam;

import java.io.Serializable;
import java.util.List;

/**
 * 动态表顶级接口类
 *
 * @author zero
 */
public interface DynamicTableService<T> extends IService<T> {
    /**
     * 批量插入或修改(优化)
     *
     * @param entityList
     * @return 影响行数
     */
    boolean saveOrUpdateBatch(List<T> entityList);

    /**
     * 批量插入或修改(优化)
     *
     * @param entityList
     * @return 影响行数
     */
    boolean saveOrUpdateBatch(List<T> entityList, DynamicTableParam dynamicTableParam);

    /**
     * 批量插入(优化)
     *
     * @param entityList
     * @return 影响行数
     */
    boolean saveBatch(List<T> entityList);

    /**
     * 批量插入(优化)
     *
     * @param entityList
     * @return 影响行数
     */
    boolean saveBatch(List<T> entityList, DynamicTableParam dynamicTableParam);

    /**
     * @param queryWrapper
     * @param dynamicTableParam
     * @return
     */
    int dynamicTableCount(QueryWrapper<T> queryWrapper, DynamicTableParam dynamicTableParam);

    /**
     * @param queryWrapper
     * @param dynamicTableParam
     * @return
     */
    boolean dynamicTableUpdate(T t, QueryWrapper<T> queryWrapper, DynamicTableParam dynamicTableParam);

    boolean delById(Serializable id, DynamicTableParam dynamicTableParam);

    T getById(Serializable id, DynamicTableParam dynamicTableParam);
}
